package com.css.openapi.BO;

import lombok.Data;

import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.util.List;

/**
 * 蓝字发票开具请求实体类
 * @author ABC
 */
@Data
public class IssueBlueInvoiceRequest {

    /**
     * 商户订单号
     */
    @NotBlank(message = "商户订单号不能为空")
    private String merchantOrderId;

    /**
     * 销售方名称
     */
    @NotBlank(message = "销售方名称不能为空")
    private String xsfmc;

    /**
     * 销售方纳税人识别号
     */
    @NotBlank(message = "销售方纳税人识别号不能为空")
    private String xsfnsrsbh;

    /**
     * 销售方地址
     */
    private String xsfdz;

    /**
     * 销售方电话
     */
    private String xsfdh;

    /**
     * 销售方开户行
     */
    private String xsfkhh;

    /**
     * 销售方账号
     */
    private String xsfzh;

    /**
     * 购买方纳税人识别号
     */
    @NotBlank(message = "购买方纳税人识别号不能为空")
    private String gmfnsrsbh;

    /**
     * 购买方纳税人名称
     */
    @NotBlank(message = "购买方纳税人名称不能为空")
    private String gmfnsrmc;

    /**
     * 购买方地址
     */
    private String gmfdz;

    /**
     * 购买方电话
     */
    private String gmfdh;

    /**
     * 购买方开户行
     */
    private String gmfkhh;

    /**
     * 购买方账号
     */
    private String gmfzh;


    /**
     * 购方是否是自然人（Y:是；N:否）
     */
    private String gfzrr;

    /**
     *发票票种（01:数电专，02：数电普）
     */
    private String fppz;


    /**
     * 开票员绑定编号
     */
    private String kpybdbh;



    /**
     * 开票结果通知地址
     */
    @NotBlank(message = "开票结果通知地址不能为空")
    private String callBackUrl;

    /**
     * 订单明细,商品行信息
     */
    @Valid
    @NotEmpty(message = "订单明细不能为空")
    private List<OrderDetail> ddmx;

    /**
     * 订单明细类
     */
    @Data
    public static class OrderDetail {
        /**
         * 明细序号
         */
        @NotNull(message = "明细序号不能为空")
        private Integer mxxh;

        /**
         * 项目名称
         */
        @NotBlank(message = "项目名称不能为空")
        private String xmmc;

        /**
         * 商品和服务税收分类编码
         */
        @NotBlank(message = "商品和服务税收分类编码不能为空")
        private String sphfwflbm;

        /**
         * 税率/征收率
         */
        @NotNull(message = "税率/征收率不能为空")
        private BigDecimal slzsl;

        /**
         * 单价
         */
        private BigDecimal price;

        /**
         * 数量
         */
        @NotNull(message = "数量不能为空")
        private BigDecimal num;

        /**
         * 含税总价
         */
        @NotNull(message = "含税总价不能为空")
        private BigDecimal taxAmount;

        /**
         * 单位
         */
        @NotBlank(message = "单位不能为空")
        private String dw;
    }
}